package global

import (
	"encoding/json"
	"fmt"
	"gitee.com/jamon/espoir_go/logger"
	"os"
	"sync"
)

type NodeData struct {
	Config *Config
}

var (
	nodeData *NodeData
	once     sync.Once
)

func GetNodeData() *NodeData {
	once.Do(func() {
		nodeData = &NodeData{
			Config: &Config{},
		}
	})
	return nodeData
}

func InitNodeData(configPath string) error {
	node := GetNodeData()
	err := node.LoadConfig(configPath)
	if err != nil {
		return err
	}
	return nil
}

func (node *NodeData) LoadConfig(jsonConfigPath string) error {
	// 读取配置文件
	byteValue, err := os.ReadFile(jsonConfigPath)
	if err != nil {
		logger.Error("Error reading JSON file: ", logger.Kwargs{"err": err})
		return fmt.Errorf("error reading JSON file: %v", err)
	}

	// 解析JSON到结构体
	err = json.Unmarshal(byteValue, node.Config)
	if err != nil {
		logger.Error("Error parsing JSON file: ", logger.Kwargs{"err": err})
		return fmt.Errorf("error parsing JSON file: %v", err)
	}

	node.Config.InitGeneratedFields()
	// 打印结构体内容，以验证是否正确解析
	logger.Debug("Parsed Config: ", logger.Kwargs{"config": node.Config})
	return err
}

func (node *NodeData) GetCurNodeType() string {
	return node.Config.Type
}
